# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
                             QHBoxLayout, QLabel, QLineEdit, QPushButton,
                             QTableWidget, QTableWidgetItem, QHeaderView,QMessageBox,QDesktopWidget)
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtWidgets import QStyleFactory

class CapitalManager(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("期货资金管理系统")
        #self.setWindowIcon(QIcon('app.png'))  # 主窗口图标,使用了应用程序级图标，可以不使用主窗口图标
        
        # 居中窗口
        screen = QDesktopWidget().availableGeometry()
        width, height = 800, 600
        x = (screen.width() - width) // 2 -150
        y = (screen.height() - height) // 2 - 150
        self.setGeometry(x, y, width, height)
        
        # 初始化UI
        self.init_ui()
        
        # 修改品种保证金（所有数值翻倍）
        self.products = [
            {
                'name': '纯碱',
                'multiplier': 20,
                'margin': 12000,  # 原6000→12000
                'stoploss': 50
            },
            {
                'name': '玻璃',
                'multiplier': 50,
                'margin': 16000,  # 原8000→16000
                'stoploss': 30
            },
            {
                'name': '红枣',
                'multiplier': 10,
                'margin': 10000,  # 原5000→10000
                'stoploss': 100
            },
            {
                'name': '棕榈油',
                'multiplier': 25,
                'margin': 14000,  # 原7000→14000
                'stoploss': 80
            }
        ]
        
        # 注释或删除背景色设置
        # self.setStyleSheet("background-color: #FFFFE0;") 

    def init_ui(self):
        # 创建主布局
        main_widget = QWidget()
        self.setCentralWidget(main_widget)
        layout = QVBoxLayout(main_widget)

        # 输入区域
        input_layout = QHBoxLayout()
        layout.addLayout(input_layout)

        # 资金输入
        self.capital_input = QLineEdit()
        self.capital_input.setPlaceholderText("输入账户总资金（元）")
        input_layout.addWidget(QLabel("账户资金:"))
        input_layout.addWidget(self.capital_input)

        # 风险比例输入（修改默认值）
        self.risk_input = QLineEdit()
        self.risk_input.setPlaceholderText("输入风险比例（%）")
        self.risk_input.setText("20")  # 默认值改为20
        input_layout.addWidget(QLabel("风险比例:"))
        input_layout.addWidget(self.risk_input)

        # 计算按钮
        self.calc_btn = QPushButton("计算开仓量")
        self.calc_btn.clicked.connect(self.calculate)
        layout.addWidget(self.calc_btn)

        # 结果表格（调整列数和表头）
        self.table = QTableWidget()
        self.table.setColumnCount(5)
        self.table.setHorizontalHeaderLabels(["品种", "保证金", "止损金额", "建议开仓量", "最大开仓量"])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        layout.addWidget(self.table)
        
        # 移除之前的 addStretch 并调整说明标签位置
        explanation = QLabel("""<span style='color: blue; font-size: 10pt'>
        计算公式说明：<br/>
        1. 最大开仓量 = (账户资金 × 风险比例) / 每手保证金（取整）<br/>
        2. 建议开仓量 = 最大开仓量 // 3
        </span>""")
        explanation.setContentsMargins(5, 5, 5, 10)  # 添加底部边距
        layout.addWidget(explanation)

        # 设置布局伸缩比例（表格占90%空间）
        layout.setStretch(0, 0)   # 输入区域固定高度
        layout.setStretch(1, 0)   # 按钮固定高度
        layout.setStretch(2, 9)    # 表格占9/10空间
        layout.setStretch(3, 1)    # 说明标签占1/10空间

    def calculate(self):
        # 获取并清理输入
        capital_text = self.capital_input.text().strip()
        risk_text = self.risk_input.text().strip()
        
        # 增加空值校验
        if not capital_text or not risk_text:
            QMessageBox.warning(self, "输入错误", "请输入完整的数值")
            return

        try:
            # 转换前移除非数字字符
            capital = float(capital_text.replace(',', ''))
            risk_percent = float(risk_text.replace('%', '')) / 100
        except ValueError:
            QMessageBox.warning(self, "输入错误", "请输入有效的数字")
            return

        self.table.setRowCount(0)

        for product in self.products:
            # 修改后的最大开仓量计算
            risk_capital = capital * risk_percent  # 风险资金
            margin = product['margin'] or 1
            max_lots = int(risk_capital / margin)
            
            # 建议开仓量计算保持不变
            suggested = max_lots // 3
            
            # 计算风险金额（仅用于显示）
            risk_per_lot = product['stoploss'] * product['multiplier']

            # 添加表格行（新增保证金列）
            row = self.table.rowCount()
            self.table.insertRow(row)
            
            # 调整列顺序（交换品种和保证金位置）
            self.table.setItem(row, 0, QTableWidgetItem(product['name']))      # 第一列：品种
            self.table.setItem(row, 1, QTableWidgetItem(str(product['margin'])))  # 第二列：保证金
            self.table.setItem(row, 2, QTableWidgetItem(f"{risk_per_lot:.2f}元")) 
            self.table.setItem(row, 3, QTableWidgetItem(str(suggested)))
            self.table.setItem(row, 4, QTableWidgetItem(str(max_lots)))

        # 添加表格刷新（新增）
        self.table.viewport().update()


        # 添加全局字体设置
if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    # 设置Windows 7风格样式
    app.setStyle(QStyleFactory.create("WindowsVista"))  # WindowsVista样式最接近Win7外观
    
    # 保持原有字体设置不变
    app.setFont(QFont("微软雅黑", 9))
    app.setStyleSheet("""
        * {
            font-family: "微软雅黑", "Consolas";
        }
        QLineEdit, QTableWidget, QLabel {
            font: 10pt "Consolas", "微软雅黑";
        }
    """)
    app.setWindowIcon(QIcon('app.png'))
    window = CapitalManager()
    window.show()
    sys.exit(app.exec_())